package org.sql2o.issues; import org.h2.jdbcx.JdbcDataSource; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.junit.Before; import org.junit.Test; import org.sql2o.Connection; import org.sql2o.Query; import org.sql2o.Sql2o; import org.sql2o.converters.Converter; import org.sql2o.converters.joda.DateTimeConverter; import org.sql2o.data.Table; import org.sql2o.quirks.H2Quirks; import org.sql2o.quirks.NoQuirks; import javax.sql.DataSource; import java.util.HashMap; import java.util.UUID; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.assertThat; /** * Created by lars on 05.10.2014. */ public class H2Tests { DataSource ds; String driverClassName; String url; String user; String pass; @Before public void setUp() throws Exception { driverClassName = "org.h2.Driver"; url = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"; user = "sa"; pass = ""; org.h2.jdbcx.JdbcDataSource datasource = new org.h2.jdbcx.JdbcDataSource(); datasource.setURL(url); datasource.setUser(user); datasource.setPassword(pass); ds = datasource; } @Test public void testIssue155() { Sql2o sql2o = new Sql2o(ds, new NoQuirks(new HashMap<Class, Converter>() {{ put(DateTime.class, new DateTimeConverter(DateTimeZone.getDefault())); }})); assertThat(sql2o.getQuirks(), is(instanceOf(NoQuirks.class))); try (Connection connection = sql2o.open()) { int val = connection.createQuery("select 42").executeScalar(Integer.class); assertThat(val, is(equalTo(42))); } } @Test public void testIssue172NPEWhenCreatingBasicDataSourceInline(){ DataSource ds = new JdbcDataSource() {{ setURL(url); setUser(user); setPassword(pass); }}; Sql2o sql2o = new Sql2o(ds); assertThat(sql2o.getQuirks(), is(instanceOf(H2Quirks.class))); } /** * Ref issue #73 */ @Test public void testUUID() { try (Connection connection = new Sql2o(ds).beginTransaction()) { connection.createQuery("create table uuidtest(id uuid primary key, val uuid null)").executeUpdate(); UUID uuid1 = UUID.randomUUID(); UUID uuid2 = UUID.randomUUID(); UUID uuid3 = UUID.randomUUID(); UUID uuid4 = null; Query insQuery = connection.createQuery("insert into uuidtest(id, val) values (:id, :val)"); insQuery.addParameter("id", uuid1).addParameter("val", uuid2).executeUpdate(); insQuery.addParameter("id", uuid3).addParameter("val", uuid4).executeUpdate(); Table table = connection.createQuery("select * from uuidtest").executeAndFetchTable(); assertThat((UUID)table.rows().get(0).getObject("id"), is(equalTo(uuid1))); assertThat((UUID)table.rows().get(0).getObject("val"), is(equalTo(uuid2))); assertThat((UUID)table.rows().get(1).getObject("id"), is(equalTo(uuid3))); assertThat(table.rows().get(1).getObject("val"), is(nullValue())); connection.rollback(); } } }